package co.gov.medellin.ssti.sub.web.action;

import java.io.IOException;
import java.sql.SQLException;
import java.util.Collection;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import co.gov.medellin.ssti.sub.model.dao.IModificarBOTDAO;
import co.gov.medellin.ssti.sub.model.dao.impl.ModificarBOTDAOImpl;

import com.cs.beneficios.business.entity.BeneficiarioDAO;
import com.cs.beneficios.business.entity.BeneficioDAO;
import com.cs.beneficios.business.entity.SedeDAO;
import com.cs.beneficios.business.entity.SubProgramaDAO;
import com.cs.beneficios.common.ConnectionFactory;
import com.cs.paoyer.administration.business.model.UserVO;

public class ValidarModificarBOTAction extends Action {
	/**
	 * This is the main action called from the Struts framework.
	 * 
	 * @param mapping
	 *            The ActionMapping used to select this instance.
	 * @param form
	 *            The optional ActionForm bean for this request.
	 * @param request
	 *            The HTTP Request we are processing.
	 * @param response
	 *            The HTTP Response we are processing.
	 */
	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws IOException, ServletException {

		ConnectionFactory cf = new ConnectionFactory();

		HttpSession session = request.getSession();
		UserVO user = (UserVO) session.getAttribute("userInfo");
		String codeBOT = request.getParameter("codeBot");

		SubProgramaDAO subproDAO = new SubProgramaDAO(cf);
		BeneficiarioDAO beneDAO = new BeneficiarioDAO(cf);

		String codeBeneficio = null;
		String codeBeneficiario = null;

		try {
			codeBeneficio = subproDAO.getCodeSubBOT(codeBOT);
			codeBeneficiario = beneDAO.getCodeBenBOT(codeBOT);

			if (codeBeneficio != null) {
				request.setAttribute("codbene", codeBeneficio);

				IModificarBOTDAO objModificarBOT = new ModificarBOTDAOImpl();
				String strSede = objModificarBOT
						.findSedeOtorgamientoByCodBot(codeBOT);
				session.setAttribute("codesede", strSede);

				SedeDAO objSedeDAO;
				Collection Csedes = null;
				objSedeDAO = new SedeDAO(cf);
				Csedes = objSedeDAO.GetTotalSedebyUser(user.getCode(),
						new Long(codeBeneficio), user.getUserGroupName(),
						user.getCodeArea(), strSede);
				cf.closeConnection(objSedeDAO.getConn());

				if ((Object) Csedes != null) {
					if (Csedes.size() > 0) {
						session.setAttribute("ListaSede", Csedes);
					} else {
						session.removeAttribute("ListaSede");
						request.setAttribute("msg",
								"Verifique la vigencia del Beneficio.");
						return mapping.findForward("fail");
					}
				}
			}

			if (codeBeneficiario != null) {
				request.setAttribute("code", codeBeneficiario);
			}

		} catch (SQLException e) {
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSUB - cwsub ********/");
		}

		try {
			BeneficioDAO beneficioDAO = new BeneficioDAO(cf);
			boolean permiso = beneficioDAO.ValidateEditBOT(
					user.getUserGroupName(), user.getName(), codeBOT);
			cf.closeConnection(subproDAO.getConn());

			if (!permiso) {
				request.setAttribute("msg",
						"No tiene permisos para modificar el beneficio otorgado");
				return mapping.findForward("fail");
			} else {
				return mapping.findForward("success");
			}
		} catch (SQLException e) {
			System.err.println("/******** TDSUB - cwsub");
			e.printStackTrace();
			System.err.println("TDSUB - cwsub ********/");
		}

		return mapping.findForward("success");
	}
}
